home *** CD-ROM | disk | FTP | other *** search
Text File | 1997-12-04 | 24.6 KB | 481 lines | [TEXT/MPS ] |
- ;
- ; File: Extension.a
- ;
- ; Contains: Extension main entry point code that implements some bug fixes for OpenFirmware
- ; on certain machines.
- ;
- ; Version: 1
- ;
- ; Written by: Ben Koning
- ;
- ; Copyright: © 1997 by Apple Computer, Inc., all rights reserved.
- ;
- ; File Ownership:
- ;
- ; DRI: None
- ;
- ; Other Contact: Ben Koning
- ;
- ; Technology: MacOS System 7
- ;
- ; Writers:
- ;
- ; (BAK) Ben Koning
- ;
- ; Change History (most recent first):
- ;
- ; <8> 9/4/97 BAK Change embedded credit comment.
- ; <7> 7/21/97 BAK Make this extension "load" on all Zanzibar - project derivative
- ; machines as named in GestaltPriv.i, not just machine #514.
- ; <6> 7/16/97 BAK Fix branch size.
- ; <5> 7/16/97 BAK Add to credits; add comment if we should do our own checksum to
- ; see if NVRAM is virgin or not and patch only if so.
- ; <4> 7/15/97 BAK Fixing param passing to ExpMgrWriteNVRAMByte call.
- ; <3> 7/10/97 BAK Filled patch byte array with actual bug fix. Still doesn't do
- ; any checking if we already patched; it just does it every time.
- ; <2> 7/9/97 BAK Code to loop thru NVRAM $1800..$1FFF dumping an array of bytes.
- ; No other whether to do it checking yet other than machine
- ; gestalt.
- ; <1> 7/1/97 BAK First checkin.
- ;
-
-
-
- ; Select options that include files use to determine what to do:
- SystemSevenOrLater EQU 1
-
-
-
- ; Standard API include files from MPW:
- PRINT OFF
- INCLUDE 'Types.a'
- INCLUDE 'Memory.a'
- INCLUDE 'Files.a'
- INCLUDE 'Devices.a'
- INCLUDE 'Resources.a'
- INCLUDE 'Timer.a'
- INCLUDE 'Retrace.a'
- INCLUDE 'Power.a'
- INCLUDE 'Gestalt.a'
- INCLUDE 'QuickDraw.a'
- INCLUDE 'Icons.a'
- PRINT ON
-
-
-
- ; The definitions that follow have been taken out of private include files
- ; for the driver and/or the system software; instead of including many cascading
- ; include files, since this software is one-off only and it is much more
- ; important that we specify unchanging values:
-
- LowMemInitIconX EQU $92C ; horizontal coordinate for next enabler icon
- LowMemInitIconY EQU $92A ; vertical coordinate for next enabler icon
- LowMemInitIconCkX EQU $92E ; complement of X coordinate for is-inited detection
- LowMemInitIconCkY EQU $928 ; complement of Y coordinate for is-inited detection
-
-
-
- ;•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
-
-
-
- ; Set code generation options and declare start of code:
- MACHINE MC68020
- BLANKS ON
- STRING PASCAL
- MAIN
-
-
-
- ;•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
-
-
-
- ; Include a header of embedded text:
- bra @EndOfText
- dc.b 'OpenFW Bug Fix for PowerMac 44xx. Bug #1660103. Fixes loading'
- dc.b ' wrong code for PCI-PCI bridges by modifying byte-load-file'
- dc.b ' id matching algorithm. Huffman, Koning, Flansburg, Phillips,'
- dc.b ' Gross, Sheet, Hall. (C) Sep-97 Apple Computer.'
- dc.b ' .'
- align 2
- @EndOfText
-
- ; Save registers for later restore:
- movem.l a0-a5/d0-d7,-(sp)
-
-
-
- ;•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
-
-
-
- ; Check if we are on a machine on which the bug was reported, exit if not;
- ; there may be problems on other machines but we will be very conservative:
- move.l #gestaltMachineType,d0 ; which machine are we?
- _Gestalt ; find out
- cmp.l #514,a0 ; match for specific machines
- beq.s @DnCkMach ; that need this fix; these are
- cmp.l #515,a0 ; all "Zanzibar" derivatives
- beq.s @DnCkMach ; (PowerMac 44xx series,
- cmp.l #516,a0 ; Motorola StarMax, etc)
- beq.s @DnCkMach
- cmp.l #517,a0
- beq.s @DnCkMach
- cmp.l #518,a0
- beq.s @DnCkMach
- cmp.l #519,a0
- beq.s @DnCkMach
- bra.s ExitExtension ; exit this entire Extension if none of these
- @DnCkMach
-
- ; Check if the version of system software we are running on is not too old to
- ; be ancient yet not too advanced to have the bug fix already; exit if so;
- ; we only let through without exit if between-and-including 7.1.0 to 8.0.0:
- move.l #gestaltSystemVersion,d0 ; what system software is running?
- _Gestalt ; find out
- move.l a0,d0 ; get it in D0
- and.l #$FFF,d0 ; mask out anything but low 3 digits
- cmp.l #$710,d0 ; we want >= SSW version 7.1.0
- bcs.s ExitExtension ; branch if unsigned-less-than
- cmp.l #$800,d0 ; we also want <= SSW version 8.0.0
- bhi.s ExitExtension ; branch if unsigned-greater-than
-
- ; Only if we reach this far, draw the Extension icon on the "INIT Parade" during boot:
- bsr.s ShowExtensionIcon
-
-
-
- ;•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
-
-
-
- ;
- ; At this point, we should probably put code to calculate a checksum on our
- ; NVRAM area and compare it with a hardcoded checksum of what we would see if
- ; the area was completely virgin (ie, after CMD-OPT-P-R boot). Only if the
- ; area was virgin would we then proceed with the patch. This means that if
- ; any options were set as non-default or especially if (another) patch were
- ; already in there, we would not apply our patch.
- ;
- ; move.w #$022E,D0 ; pascal UInt8 ExpMgrReadNVRAMByte (UInt32 long address)
- ; dc.w $AAF3 ; _ExpMgrReadNVRAMByte
-
-
-
- ;
- ; Write the contents of our data array to the appropriate NVRAM area; this will
- ; include the embedded checksum.
- ;
- lea.l DataToPatch,a3 ; Address and incrementing index into our data array.
- move.l #$1800,d7 ; Start of NVRAM-addresses where patches are put.
- @WriteLoop
- move.b (a3)+,d0 ; Get a byte of our patch data and bump index into our array.
-
- asl.w #8,d0 ; Move it into hi-8 bits for param passing as 16-bit word.
- and.w #$FF00,d0 ; And clean the lo-8 bits up.
- move.l d7,-(sp) ; Pass NVRAM-address.
- move.w d0,-(sp) ; Pass data byte imbedded in a word.
- move.w #$032F,d0 ; pascal void ExpMgrWriteNVRAMByte (UInt32 address, UInt8 data).
- dc.w $AAF3 ; _ExpMgrDispatch.
-
- addq.l #1,d7 ; Bump NVRAM-address pointer.
- cmp.l #(($1FFF)+1),d7 ; (End)+1 of NVRAM-addresses where patches are put.
- bne.s @WriteLoop ; Loop to fill from our array.
-
-
-
- ;•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
-
-
-
- ExitExtension ; Restore registers and exit from this Extension back to system.
- movem.l (sp)+,a0-a5/d0-d7
- rts
-
-
-
- ;•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
-
-
-
- ShowExtensionIcon
- ;
- ; This routine adds our Extension icon to the "Init Parade" of icons shown
- ; during boot. All Extensions have to draw their own icons; the position of
- ; the icons revolves around four low mem global values that hold the next
- ; available X,Y coordinates and checksum/complement values for them to assume
- ; validity since nobody, apparently not even the System, initializes them.
- ; Furthermore, since Extensions are INITs which have no 68K runtime world,
- ; this must be temporarily created for the use of QuickDraw calls, etc.
- ;
-
- ; Save registers:
- movem.l d0-d2/a0/a5,-(sp)
-
- ; Init our own QD global world with A5 so we can use QuickDraw and Icon calls:
- lea.l QDGlobalsPtr,a5
- lea.l QDGlobalsStorage,a0
- add.l #QDGlobals.thePort,a0
- move.l a0,-(sp)
- _InitGraf
-
- ; Check, and if necessary, initialize global X,Y positions for the icon if the
- ; checksum values are not OK. Note that since we possibly manipulate the X,Y
- ; values here and later in this routine, it is necessary to update the checksum
- ; values before exiting this routine:
- move.w LowMemInitIconX,d0
- bsr CalcInitIconPosnCk
- cmp.w LowMemInitIconCkX,d0
- beq.s @DnCkFixX
- move.w #8,LowMemInitIconX
- @DnCkFixX
- move.w LowMemInitIconY,d0
- bsr CalcInitIconPosnCk
- cmp.w LowMemInitIconCkY,d0
- beq.s @DnCkFixY
- lea.l QDGlobalsStorage,a0
- move.w QDGlobals.screenBits.bounds.bottom(a0),d0
- sub.w #40,d0
- move.w d0,LowMemInitIconY
- @DnCkFixY
-
- ; Check, and if necessary, wrap-around the global X,Y positions for the icon
- ; parade if it threatens to run off the right hand side of the screen. If so,
- ; reset back to the right and go up one row of icons:
- move.w LowMemInitIconX,d0
- add.w #34,d0
- lea.l QDGlobalsStorage,a0
- cmp.w QDGlobals.screenBits.bounds.right(a0),d0
- ble.s @DnCkWrap
- move.w #8,LowMemInitIconX
- sub.w #40,LowMemInitIconY
- @DnCkWrap
-
- ; Draw our icon using the current global X,Y positions:
- lea.l IconRectStorage,a0
-
- move.w LowMemInitIconX,d0
- move.w d0,Rect.left(a0)
- add.w #32,d0
- move.w d0,Rect.right(a0)
-
- move.w LowMemInitIconY,d0
- move.w d0,Rect.top(a0)
- add.w #32,d0
- move.w d0,Rect.bottom(a0)
-
- lea.l CPortStorage,a0 ; pass CGrafPortPtr (of CGrafPort space to be initted)
- move.l a0,-(sp)
- _OpenCPort
-
- lea.l IconRectStorage,a0 ; pass theRectPtr
- move.l a0,-(sp)
- move.w #atNone,-(sp) ; pass the IconAlignmentType of default
- move.w #ttNone,-(sp) ; pass the IconTransformType of default
- move.w #-16455,-(sp) ; pass the theResID of our "Finder Special Icon" icon-family
- _PlotIconID
-
- lea.l CPortStorage,a0 ; pass CGrafPortPtr
- move.l a0,-(sp)
- _CloseCPort
-
- ; Advance to next X position for the icon following us:
- add.w #40,LowMemInitIconX
-
- ; Because we have most likely manipulated the global X,Y next-extension-icon coordinates
- ; without updating their respective checksums, we need to do this now before exiting:
- move.w LowMemInitIconX,d0
- bsr CalcInitIconPosnCk
- move.w d0,LowMemInitIconCkX
-
- move.w LowMemInitIconY,d0
- bsr CalcInitIconPosnCk
- move.w d0,LowMemInitIconCkY
-
- ; Restore registers and exit this routine:
- movem.l (sp)+,d0-d2/a0/a5
- rts
-
-
-
- ;
- ; Variables used by us. These are self-modified here in this code section;
- ; note that that makes us non-ROM-able:
- ;
- QDGlobalsStorage ds.b QDGlobals.sizeof
- QDGlobalsPtr dc.l 0
- CPortStorage ds.b CGrafPort.sizeof
- IconRectStorage ds.b Rect
-
-
-
- CalcInitIconPosnCk
- ;
- ; INPUT: D0.W (high 16-bits ignored)
- ; OUTPUT: D0.L (low 16-bits significant; high 16-bits cleared)
- ;
- ; ACTION: This routine calculates the special "checksum" complement of
- ; the given extension (init) icon coordinate for the purposes
- ; of is-first-and-do-we-need-to-init purposes.
- ;
- movem.l d1/d2,-(sp) ; save registers; D0 is input
- clr.l d2 ; clear accumulator to zeros
- move.w d0,d1 ; get input "x"
- asl.w #1,d1 ; make it x << 1
- or.w d1,d2 ; or it into our accumlator
- move.w d0,d1 ; get input "x"
- lsr.w #8,d1 ; make it x >> 8
- lsr.w #7,d1 ; now it is x >> 15
- or.w d1,d2 ; or it into our accumulator
- eor.w #$1021,d2 ; xor our accumulator with 0x1021
- move.w d2,d0 ; put accumlated result in D0
- movem.l (sp)+,d1/d2 ; restore registers; D0 is output
- rts ; and leave
-
-
-
- ;•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
-
- ;
- ; Data array that is written to the NVRAM Open Firmware patch area:
- ;
- DataToPatch ; 2048 ($800) bytes, 16 per row.
-
- dc.b $12, $75, $05, $08, $CA, $1A, $18, $5C, $1F, $96, $00, $00, $21, $00, $00, $00 ; •u•• ••\•ñ••!•••
- dc.b $FF, $FF, $FF, $FF, $00, $10, $00, $00, $FF, $FF, $FF, $FF, $00, $10, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $40, $00, $FF, $FF, $FF, $FF, $00, $00, $00, $64, $00, $00, $00, $28 ; ••@••••••••d•••(
- dc.b $00, $00, $00, $00, $1F, $F7, $00, $09, $1F, $F7, $00, $00, $1F, $EF, $00, $08 ; ••••••••••••••••
- dc.b $1F, $EF, $00, $00, $1F, $EB, $00, $04, $1F, $E7, $00, $04, $1F, $E7, $00, $00 ; ••••••••••••••••
- dc.b $1F, $E7, $00, $00, $1F, $96, $00, $4D, $1F, $E3, $00, $04, $00, $00, $00, $00 ; •••••ñ•M••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ••••••••••••••••
- dc.b $00, $00, $00, $00, $00, $00, $27, $20, $62, $79, $74, $65, $2D, $6C, $6F, $61 ; ••••••' byte-loa
- dc.b $64, $2D, $66, $69, $6C, $65, $20, $64, $20, $6E, $61, $2B, $20, $20, $27, $20 ; d-file d na+ '
- dc.b $6F, $72, $20, $20, $62, $6C, $70, $61, $74, $63, $68, $20, $20, $27, $20, $62 ; or blpatch ' b
- dc.b $79, $74, $65, $2D, $6C, $6F, $61, $64, $2D, $66, $69, $6C, $65, $3F, $20, $64 ; yte-load-file? d
- dc.b $20, $6E, $61, $2B, $20, $20, $27, $20, $6F, $72, $20, $20, $62, $6C, $70, $61 ; na+ ' or blpa
- dc.b $74, $63, $68, $62, $6F, $6F, $74, $74, $74, $79, $61, $74, $74, $79, $61, $66 ; tchbootttyattyaf
- dc.b $64, $3A, $64, $69, $61, $67, $73, $2F, $41, $41, $50, $4C, $2C, $52, $4F, $4D ; d:diags/AAPL,ROM
-
-
-
- ;•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
-
- ; Declare end of code generation:
- END
-
-